﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
using WpfApp.ReturnOperation;

namespace WpfApp
{
    /// <summary>
    /// App.xaml 的交互逻辑
    /// </summary>
    public partial class App : Application
    {
        public App()
        {
            Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
        }

        void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        {
            // 这里通常需要给用户一些较为友好的提示，并且后续可能的操作
            MessageBox.Show(e.Exception.Message, "意外的操作", MessageBoxButton.OK, MessageBoxImage.Information);

            e.Handled = true;//我们很抱歉，当前应用程序遇到一些问题，该操作已经终止，请进行重试，如果问题继续存在，请联系管理员.
        }
    }

    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            //args = new string[] { "UploadFile,ServerIP=127.0.0.1&Type=2&UserID=xx&CaseID=604dffdd-0f8f-430d-8ca4-1d9714ba7609,11202" };
            // 校验启动的参数，未设置参数为非法启动
            if (null == args || args.Length <= 0)
            {
                MessageBox.Show("非法启动！");
                return;
            }
            // 获取参数，在WindowsFormsDemo里启动的时候设置，参数的规则自己设置
            string activeParameter = args[0];
            string[] parameters = activeParameter.Split(',');

            try
            {
                App app = new App();
                string activeName = parameters[0];
                if (activeName == "UploadFile")
                {
                    MainWindow mainWindow = new MainWindow();
                    // 获取主界面的句柄(最后一个参数)，向主窗体发送消息需要根据主窗体的句柄来发送
                    // 在启动这个WpfApp 进程的时候设置最后一个参数为主窗体句柄
                    OperationContainer.ContainerPlayPtr = new IntPtr(Convert.ToInt32(parameters[parameters.Length - 1]));
                    app.MainWindow = mainWindow;
                    app.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);
                }
                // 参数就是拼接的字符串，看WindowsFormsDemo主窗体的拼接方式
                GetParameters(parameters[1]);
                app.Run();
                App.Main();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        /// <summary>
        /// 分割参数（参数规则看WindowsFormsDemo启动时设置的参数字符串）
        /// </summary>
        /// <param name="param"></param>
        static void GetParameters(string param)
        {
            string[] strs = param.Split('&'); ;
            Dictionary<string, string> dic = new Dictionary<string, string>();
            foreach (var item in strs)
            {
                string[] key = item.Split('=');
                dic.Add(key[0], key[1]);
            }

            // 静态来存放参数值
            OperationContainer.ServerIP = dic["ServerIP"];
            OperationContainer.Type = dic["Type"];
            OperationContainer.UserID = dic["UserID"];
            OperationContainer.CaseID = dic["CaseID"];
        }
    }
}
